<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        /* 
            拷贝--复制--（创建一个新对象，和原 对象的属性都一样，但是一个新对象，两个对象的地址不一样）

            深拷贝
            浅拷贝
        */

        var zhangsan = { name: 'zhangsan', age: 18, child: { name: '张三丰' } };
        // 拷贝一个 zhangsan 对象 出来 
        // 创建一个新对象，和原 对象的属性都一样，但是一个新对象，两个对象的地址不一样


        // 深拷贝
        // 发现对象的属性值 是一个对象，就去创建新的出来

        // 内层的属性如果是一个对象，地址也不一样


        // 根据zhangsan。child ，创建一个新的child ，里面的属性都一样
        let newChild = {};
        newChild.name = zhangsan.child.name

        var lisi = { name: zhangsan.name, age: zhangsan.age, child: newChild };


        /* 
            栈
                zhangsan : 001
                lisi : 002
            堆
                001 {name:'zhangsan',age:18,child:0001}

                0001 {name:'张三丰'}
                0002 {name:'张三丰'}

                002 {name:'zhangsan',age:18,child:0002}
        
        */

        console.log(zhangsan);
        console.log(lisi);

        // false
        console.log(zhangsan === lisi);//false

        // 修改了lisi 孩子的 age属性，结果 zhangsan的child的age属性不改变
        lisi.child.age = 19
        console.log(zhangsan.child);


        console.log(lisi.child === zhangsan.child);//false

    </script>

</body>

</html>